package RunExceptionTest.ExceptionDemo;

/**
 * @Description: 异常练习
 * @author : mr.zhi(zhilx1997@sina.com)
 * @version: v1.1
 * @data: 2022/01/16 09:25
 * @node: 异常练习
 *        1. 编写应用程序EcmDef.java，接收命令行的两个参数，要求不能输入负数，计算两数相除。
 *        对数据类型不一致（NumberFormatException）、缺少命令行参数
 *        （ArrayIndexOutOfBoundException）、除0（ArithmeticException）及输入负数（EcDef自定义的异常）进行异常处理
 *        2. 提示：
 *        (1) 在主类（EcmDef）中定义异常方法（ecm）完成两数相除功能。
 *        (2) 在main() 方法中使用异常处理语句进行异常处理。
 *        (3) 在程序中，自定义对应输入负数的异常类（EcDef）。
 *        (4) 运行时接受参数 java EcmDef 20 10 // args[0] = "20", args[1] = "10"
 *        (5) Integer类的static方法parseInt(String s)将s转换为对应的int值。
 */
public class EemDef {
    public static void main(String[] args) {

        // 2. 进行异常处理
        try {
            // 1. 读取自定义输入
            int a = Integer.parseInt(args[0]);
            int b = Integer.parseInt(args[1]);

            int res = emc(a, b);

            System.out.println("a / b = " + res);

        } catch (NumberFormatException e) {
            e.printStackTrace();
            // System.out.println(e.getMessage());
        } catch (ArrayIndexOutOfBoundsException e) {
            // System.out.println(e.getMessage());
            e.printStackTrace();
        } catch (ArithmeticException e) {
            // System.out.println(e.getMessage());
            e.printStackTrace();
        } catch (EcDef e) {
            System.out.println(e.getMessage());
        } finally {
            System.out.println("");
        }
    }

    // 判断是否为负数，若为，则手动抛出异常
    public static int emc(int a, int b) throws EcDef {
        if (a < 0 || b < 0) {
            throw new EcDef("分子或分母不能为0");
        }

        return a / b;
    }
}
